#include "utils.h"

float safeStof(const std::string& input) {
    try {
        return std::stof(input);
    } catch (const std::invalid_argument& e) {
        std::cerr << "无效参数错误：字符串 \"" << input << "\" 无法转换为浮点数。" << std::endl;
        return 0.0f;
    } catch (const std::out_of_range& e) {
        std::cerr << "数值超出范围：字符串 \"" << input << "\" 无法表示为浮点数。" << std::endl;
        return 0.0f;
    }
}

bool isInteger(const std::string& str) {
    try {
        // 尝试将字符串转换为整数
        std::size_t pos;
        int value = std::stoi(str, &pos);
        // 如果整个字符串都被转换，则 pos == str.size()
        return pos == str.size();
    } catch (const std::invalid_argument&) {
        // 转换失败（不是数字）
        return false;
    } catch (const std::out_of_range&) {
        // 数字超出 int 范围
        return false;
    }
}

std::string removeRedundantBrackets(std::string& str) {
    size_t pos = str.find('(');

    std::string res;

    if (pos != std::string::npos) {
        res = str.substr(0, pos);
    } else {
        res = str;
    }
   return res;
}